Transacciones – Referencia del SDK de TypeScript
Descripción general
El SDK de TypeScript expone un pequeño conjunto de tipos y métodos para:
- Abrir una sesión de transaction contra un node
- Construir, firmar (mediante el backend WASM) y enviar una transaction
- Inspeccionar la transaction resultante y su estado/salida
- Trabajar con payloads de transacciones de smart contract
Esta página documenta esos tipos y métodos principales para referencia rápida. Los tutoriales y ejemplos de extremo a extremo se ubicarán en páginas separadas.
Importaciones
import {
TransactionSession,
createTransactionSession,
DEFAULT_ADMIN_AUTH_GROUP,
} from "@uledgerinc/typescript-sdk";
import {
TRANSACTION_VERSION,
TransactionStatus,
TransactionType,
TransactionOutput,
parseTransactionStatus,
parseTransactionType,
parseTransactionOutput,
ULTransaction,
ULTransactionInput,
ULTransactionOutputData,
ULBlock,
InvokeContractPayload,
UpgradeContractPayload,
RollbackContractPayload,
} from "<your-sdk>/types/transaction";
import { Wallet, WASMBackend } from "@uledgerinc/typescript-sdk";
Reemplaza
"<your-sdk>"con el nombre o ruta de tu paquete.
Constantes y enumeraciones de transaction
TRANSACTION_VERSION
export declare const TRANSACTION_VERSION = "2.0.0";
Estado: TransactionStatus
export declare enum TransactionStatus {
Invalid = "INVALID",
Submitted = "SUBMITTED",
Accepted = "ACCEPTED",
Rejected = "REJECTED"
}
Refleja el tipo transaction.UL_TransactionStatus de Go.
Tipo: TransactionType
export declare enum TransactionType {
Invalid = "",
Data = "DATA",
CreateWallet = "CREATE_WALLET",
AlterWallet = "ALTER_WALLET",
DeploySmartContract = "DEPLOY_SMART_CONTRACT",
InvokeSmartContract = "INVOKE_SMART_CONTRACT",
UpgradeSmartContract = "UPGRADE_SMART_CONTRACT",
RollbackSmartContract = "ROLLBACK_SMART_CONTRACT"
}
Refleja el tipo transaction.ULTransactionType de Go.
Valores comunes:
TransactionType.Data— transaction de datos genéricaTransactionType.CreateWallet/TransactionType.AlterWallet— transacciones de gestión de walletTransactionType.DeploySmartContract,TransactionType.InvokeSmartContract,TransactionType.UpgradeSmartContract,TransactionType.RollbackSmartContract— operaciones de smart contract
Salida: TransactionOutput
export declare enum TransactionOutput {
Invalid = "",
ToBeProcessed = "TO_BE_PROCESSED",
Success = "SUCCESS",
RejectedByDuplicate = "REJECTED_BY_DUPLICATE",
RejectedByUnexisting = "REJECTED_BY_UNEXISTING",
RejectedByDisabled = "REJECTED_BY_DISABLED",
RejectedByUnauthorized = "REJECTED_BY_UNAUTHORIZED",
RejectedByInvalidSignature = "REJECTED_BY_INVALID_SIGNATURE",
TransactionError = "TRANSACTION_ERROR"
}
Refleja el tipo transaction.UL_TransactionOutput de Go.
Tipos de transaction
VectorClock
export type VectorClock = Record<string, number>;
Refleja el tipo transaction.VectorClock de Go.
Timestamp
export interface Timestamp {
exactTime: Date;
approximateTime: Date;
}
Refleja el tipo transaction.Timestamp de Go.
ULTransactionInput
Campos utilizados para crear una transaction:
export interface ULTransactionInput {
blockchainId: string;
to: string;
from: string;
payload: string;
senderSignature: string;
payloadType: TransactionType | string;
suggestor: string;
senderTimestamp: Date;
payloadRoot: string;
keyType: KeyType;
}
Refleja el tipo transaction.ULTransactionInput de Go.
En el uso típico, muchos de estos campos se completan durante la firma por parte del backend WASM.
ULTransactionOutputData
Campos devueltos por el node:
export interface ULTransactionOutputData {
transactionId: string;
blockHeight: number;
vectorClock: VectorClock;
timestamp: Timestamp;
version: string;
weight: number;
status: TransactionStatus | string;
output: TransactionOutput | string;
proof: string;
proofVersion: string;
}
Refleja el tipo transaction.ULTransactionOutput de Go.
ULTransaction
export interface ULTransaction extends ULTransactionInput, ULTransactionOutputData {}
Combina tanto los campos de entrada (lo que se envió) como los campos de salida (lo que devolvió el node), reflejando el tipo transaction.ULTransaction de Go.
ULBlock
export interface ULBlock {
blockHash: string;
previousBlockHash: string;
height: number;
transactions: ULTransaction[];
merkleRoot: string;
voters: Record<string, string>;
}
Refleja el tipo transaction.ULBlock de Go.
Sesión de transaction
Clase: TransactionSession
export declare class TransactionSession {
constructor(nodeEndpoint: string, wallet: Wallet, backend: WASMBackend);
initialize(): Promise<void>;
getWallet(): Wallet;
getNodeEndpoint(): string;
getSuggestor(): string;
submitTransaction(options: CreateTransactionOptions): Promise<ULTransaction>;
submitData(options: DataTransactionOptions): Promise<ULTransaction>;
deployContract(options: DeployContractOptions): Promise<ULTransaction>;
invokeContract(options: InvokeContractOptions): Promise<ULTransaction>;
upgradeContract(
blockchainId: string,
contractAddress: string,
newSourceCode: string,
reason?: string
): Promise<ULTransaction>;
rollbackContract(
blockchainId: string,
contractAddress: string,
targetVersion: number,
reason?: string
): Promise<ULTransaction>;
createWallet(blockchainId: string, walletData: object): Promise<ULTransaction>;
alterWallet(blockchainId: string, targetWalletAddress: string, alterData: object): Promise<ULTransaction>;
registerWallet(blockchainId: string, walletToRegister?: Wallet, customAuthGroups?: AuthGroups): Promise<ULTransaction>;
getTransaction(blockchainId: string, transactionId: string): Promise<ULTransaction>;
getBlock(blockchainId: string, height: number): Promise<any>;
}
Una sesión encapsula:
- el node endpoint
- el suggestor (ID del node utilizado para la transaction)
- el wallet utilizado para firmar
- el backend WASM que calcula los compromisos y firmas
createTransactionSession
export declare function createTransactionSession(
nodeEndpoint: string,
wallet: Wallet,
backend: WASMBackend
): Promise<TransactionSession>;
Función de fábrica que devuelve una sesión inicializada.
initialize()
initialize(): Promise<void>;
Realiza las siguientes llamadas:
GET {nodeEndpoint}/healthpara obtener elnodeId(almacenado comosuggestor)GET {nodeEndpoint}/blockchainspara verificar que existe al menos un blockchain
Envío de transacciones en la sesión
submitTransaction(options)
submitTransaction(options: CreateTransactionOptions): Promise<ULTransaction>;
Crea, firma (mediante el backend WASM) y envía una transaction a:
POST {nodeEndpoint}/blockchains/{blockchainId}/transactions
submitData(options)
submitData(options: DataTransactionOptions): Promise<ULTransaction>;
Wrapper de conveniencia para TransactionType.Data. Si data es un objeto, se serializa a JSON antes del envío.
Payloads de smart contract
ContractArgs
export interface ContractArgs {
value: Uint8Array | string;
}
Refleja el tipo transaction.ContractArgs de Go.
InvokeContractPayload
export interface InvokeContractPayload {
functionName: string;
args: ContractArgs[];
gasLimit: number;
}
Refleja el tipo transaction.InvokeContractPayload de Go.
Se utiliza con TransactionType.InvokeSmartContract (típicamente codificado en JSON dentro de ULTransactionInput.payload).
UpgradeContractPayload
export interface UpgradeContractPayload {
newSourceCode: string;
upgradeReason?: string;
}
Refleja el tipo transaction.UpgradeContractPayload de Go.
Se utiliza con TransactionType.UpgradeSmartContract.
RollbackContractPayload
export interface RollbackContractPayload {
targetVersion: number;
rollbackReason?: string;
}
Refleja el tipo transaction.RollbackContractPayload de Go.
Se utiliza con TransactionType.RollbackSmartContract.
Funciones de parseo
parseTransactionStatus
export declare function parseTransactionStatus(str: string): TransactionStatus;
parseTransactionType
export declare function parseTransactionType(str: string): TransactionType;
parseTransactionOutput
export declare function parseTransactionOutput(str: string): TransactionOutput;
Esta página está destinada a ser una referencia. Para guías paso a paso, consulta nuestra sección de tutoriales.